# 对文章内容进行摘要总结
# 继续来实现第三个 SummaryNode，基于全文的内容生成摘要总结。之所以需要摘要，是为了后面的生成插图做准备。

from langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts import ChatPromptTemplate

from Article_image_ai_agent.deepseek import get_deepseek
from Article_image_ai_agent.prompt import SYSTEM_PROMPT, SUMMARY_PROMPT
from Article_image_ai_agent.state import ArticleState

# 摘要Prompt
SUMMARY_PROMPT = """
现在，文章已经写好了，请你根据文章的主题、标题和正文内容，生成一段30~60字的摘要，总结这篇文章的核心内容。
标题：{title}
正文内容：{content}
"""


def summary_node(state: ArticleState) -> ArticleState:
    """
    文章摘要节点
    :param state: 当前文章状态
    :return: 处理后的文章状态
    """

    # 从当前状态中获取所需信息
    if not state["topic"]:
        raise ValueError("未指定文章主题！")
    if not state["title"]:
        raise ValueError("文章标题缺失！")
    if not state["content"]:
        raise ValueError("文章正文内容缺失！")
    topic = state["topic"]
    title = state["title"]
    content = state["content"]

    # 构造prompt
    prompt = ChatPromptTemplate.from_messages([
        ("system", SYSTEM_PROMPT),
        ("user", SUMMARY_PROMPT)
    ])

    # 获取DeepSeek客户端
    deepseek = get_deepseek()

    # 构造Chain
    chain = prompt | deepseek | StrOutputParser()

    # 调用Chain,获取结果
    summary = chain.invoke({"topic": topic, "title": title, "content": content})

    # 更新状态
    state["summary"] = summary
    print(f"文章摘要生成完成：共 {len(summary)} 字")

    # 返回处理后的状态
    return state

